// #include <iostream>

// using namespace std;

// class Integer {
//     int x, y;

//    public:
//     Integer(int x, int y) : x(x), y(y) {
//         cout << "constructing Int " << x << endl;
//     }
//     Integer& operator=(const Integer& other) {
//         if (this != &other) {
//             cout << "operator= invoked" << endl;
//             x = other.x;
//         }
//         return *this;
//     }
// };
// int main() {
//     // Integer a = 1, b;
//     Integer b = 2;
//     cout << "b = 2;" << endl;
//     b = Integer(2);
//     cout << "b = Integer(2);" << endl;
//     return 0;
// }

#include <iostream>

using namespace std;

class Integer {
    int x;

   public:
    Integer(int x) {
        this->x = x;
        cout << "constructing Int " << x << endl;
    }
    Integer& operator=(const Integer& other) {
        if (this != &other) {
            cout << "operator= invoked" << endl;
            x = other.x;
        }
        return *this;
    }
};
int main() {
    Integer a = 1;
    // b = 1;
    a = 3;
    return 0;
}